package collage.aminpage;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.beans.Statement;
import java.sql.Connection;
import java.util.Calendar;
import java.util.GregorianCalendar;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;


public class Swingcalendar extends JFrame implements ActionListener {

private JPanel north = null;
private JPanel body = null;
	String [] days  = { "일", "월", "화", "수", "목",  "금", "토"};
	int year, month, day, todays, memoday = 0;
	Font f;
	Color bc, fc;
	Calendar today;
	Calendar cal;
	
	JButton btnBefore, btnAfter;
	JButton btnAdd, btnDel;
	JButton[] calBtn = new JButton[49];
	
	JLabel thing;
	JLabel time;
	
	JPanel panWest;
	JPanel panSouth;
	JPanel panNorth;
	JPanel panEast;
	
	JTextField txtMonth, txtYear, txtWrite;
	JTextField txtTime;
	BorderLayout bLayout = new BorderLayout();
	
	////////////////////////////////////////////
	Connection con = null;
	Statement stmt = null;
	
	// jdbc 연동부분
	/*
	String driver = "org.git.mm.mysql.Driver";
	
	
	
	*/
	
	
	// http://blog.naver.com/PostView.nhn?blogId=donkey612&logNo=70067118479
	// 집에가서 구현할것 1 = 달력
	// 2 = 카테고리 상세정보 = info 카테고리 디테일화
	// 3 = 학생, 교수번호 등록 페이지
	// 4 = 로고 구상.
	
	public Swingcalendar() {
			today = Calendar.getInstance(); // 디폴트 타임 존 및 로케일을 사용해 달력을 불러옴
			cal = new GregorianCalendar();
			/*
			GregorianCalendar 는, Calendar 의 구상 서브 클래스이며,
			세계의 대부분 지역에서 사용되는 표준적인 달력 시스템을 제공
			*/
			
			year = today.get( Calendar.YEAR );
			month = today.get( Calendar.MONTH) + 1; // 1월의 값이 0
			
			panNorth = new JPanel();
			panNorth.add( btnBefore = new JButton( "Before" ) );
			panNorth.add( txtYear = new JTextField( year + "년" ) );
			panNorth.add(  txtMonth = new JTextField( month  + "월") );
			txtYear.setEditable( false );
			txtMonth.setEditable( false );
			
			
			panNorth.add( btnAfter = new JButton( "After" ) );
			f = new Font("Sherif", Font.BOLD, 24 );
			txtYear.setFont( f );
			txtMonth.setFont( f );
			panNorth.add( btnAdd = new JButton(  "메모추가" ) ) ;
			panNorth.add( btnDel = new JButton(  "메모삭제" ) ) ;
			
			add( panNorth, "North" );
			/*
			jdbcpro라는 놈은 큰놈 위에레이아웃을 동, 서, 남, 북으로나눠서
			패널을 하나 하나 올려놓는 형식이다
			메인보드 위에부품이 하나 하나 조립되듯
			*/	
			
			// 달력의 날에 해당되는 부분
			
			panWest = new JPanel( new GridLayout( 7, 7 ) ); // 격자나, 눈금 형태의 배치 관리자
			f = new Font( "Sherif", Font.BOLD, 12 );
			
			gridInit();
			calSet();
			hideInit();
			add ( panWest, "West" );
			
			panEast = new JPanel();
			panEast.add( time = new JLabel( "메모") );
			panEast.add( txtWrite = new JTextField() );
			txtWrite.setPreferredSize( new Dimension( 200, 150 ) );
			// 메모를 입력받을 텍스트 박스를가로200 세로 50에 생성
			add( panEast, "East" );
			
			btnBefore.addActionListener(this);
			btnAfter.addActionListener(this);
			btnAdd.addActionListener(this);
			btnDel.addActionListener(this);
			
			setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
			setTitle( "Swing을 이용한 JDBC 메모장"  );
			setBounds(100, 100, 600, 300);
			setVisible( true );
					
		
	}	// end constuctor
	
	public void calSet(){
		cal.set( Calendar.YEAR, year );
		cal.set(Calendar.MONTH, ( month - 1 ) );
		cal.set(Calendar.DATE, 1 );
		int dayOfWeek = cal.get( Calendar.DAY_OF_WEEK );
		
		/*
		get 및 set 를 위한 필드치로, 요일을 나타냅니다.
		이 필드 값은, SUNDAY, MONDAY, TUESDAY, WEDNESDAY, 
		THURSDAY,FRIDAY, 및 SATURDAY 가 됩니다.
		get () 메소드의 의해 요일이 숫자로 반환
		*/
		
		int j = 0;
		int hopping = 0;
		calBtn[0].setForeground( new Color(255, 0, 0 ) );  // 일요일 "일"
		calBtn[6].setForeground( new Color(0, 0, 255 ) );  // 토요일 "토"
		for( int  i = cal.getFirstDayOfWeek() ; i < dayOfWeek ; i++ )	{ j++; }
		
		// 일요일부터 그달의 첫 시작 요일까지 빈칸으로세팅하기 위해
		
		hopping = j;
		for ( int kk=0 ; kk < hopping  ; kk++ ){
				calBtn[ kk+7 ].setText("");
		}
		for ( int i = cal.getMinimum( Calendar.DAY_OF_MONTH ) ; 
						i <= cal.getMaximum( Calendar.DAY_OF_MONTH ) ; i++ ) {
			cal.set(  Calendar.DATE, i);
			if ( cal.get(Calendar.MONTH) != month - 1 ){
				break;
			}
			dbConnect();
			todays = i;
			checkday();
			if( memoday ==1 ){
					calBtn[ i + 6 + hopping ].setForeground( new Color( 0 , 255, 0 ) );
			}
			else {
					
				calBtn[ i + 6 + hopping ].setForeground( new Color( 0 , 0, 0 ) );
				if (  ( i + hopping -1 ) %7 == 0 ) { // 일요일
					calBtn[ i + 6 + hopping ].setForeground( new Color( 255, 0, 0 ));
					
				}
				if (  ( i + hopping ) %7 == 0 ) { // 토요일
				calBtn[ i + 6 + hopping ].setForeground( new Color( 255, 0, 0 ));
				}
				
			} // else
			
			/*요일을 찍은 다음부터개산해야 하니 요일을 찍은 버튼의 갯수를 더하고
			인덱스가  0 부터 시작이니 -1을 해준 값으로 연산을 해주고 
			버튼의 색깔을 변경해준다.
			*/
			calBtn[i + 6 + hopping].setText( (i) + "" );
			
					
		} // for 
		
				
	} // calset
	public void actionPreforme ( ActionEvent  ae ){
				if ( ae.getSource() == btnBefore ){
					this.panWest.removeAll();
					callput( -1 );
					gridInit();
					panelInit();
					calSet();
					this.txtYear.setText( year +"년");
					this.txtMonth.setText( month +"월");
					
				}	
				
				else if ( ae.getSource() == btnAfter ){
					callput( -1 );
					gridInit();
					panelInit();
					calSet();
					this.txtYear.setText( year +"년");
					this.txtMonth.setText( month +"월");
							
					
				}
				else if  ( ae.getSource() == btnAdd ){
					dbConnect();
					add();
					calSet();
					txtWrite.setText( "" );
								
				}
				else if ( ae.getSource() == btnDel ){
					dbConnect();
					del();
					calSet();
					txtWrite.setText("");		
					
				}
				
				else if ( Integer.parseInt( ae.getActionCommand() ) >= 1 && Integer.parseInt( ae.getActionCommand() ) <= 31 ){
					day = Integer.parseInt( ae.getActionCommand()  );
					// 버튼의 밸류 즉 1,2,3... 문자를 정수형으로 변환하여 클릭한날짜를 바꿔준다
					System.out.println( day );
					dbConnect();
					searchmemo();
					calSet();
							
					
				}
				
		
		
		
	} // actionperformed
	
	public void hideInit() {
			for ( int i = 0 ; i < calBtn.length ; i++ ){
				if ( (calBtn[1].getText() ).equals( "" ) ){
							calBtn[i].setEnabled( false );
							// 일이 찍히지 않은 나머지 버튼을 비활성화 시킨다.
				}
									
			} // for
		
		
	} // hideInit
	
	
// public void separate {	
	
	public void gridInit(){
		// jpanel3에 버튼 붙이기
		for ( int i = 0 ; i < days.length ; i++ )
			panWest.add( calBtn[i] = new JButton( days[i]) );
		
		for ( int i = days.length ; i < 49 ; i++  ){
					panWest.add( calBtn[i] = new JButton( "" )  );
					calBtn[i].addActionListener(this);
		} 
		
	} // gridInit
	
	public void panelInit() {
		GridLayout gridLayout1 = new GridLayout( 7, 7 );
		panWest.setLayout( gridLayout1 );
				
	} // panelInit 
	
	public void calInput  ( int gap ){
		month += ( gap );
		if ( month <= 0 ){
				month = 12;
				year = year -1;
		}
		else if ( month >= 13 ) {
			month = 1;
			year = year + 1;
		}
		
	} // calInput

	/*	
 		public void dbConnect() {
		
		
		
	}
*/	
	
	
} // class 
